package main

import (
	"encoding/json"
	"fmt"
	"log"
)

type Person struct {
	name string `json:"name"`
	city string `json:"city"`
	age  int    `json:"age"`
	Animal
}
type Animal struct {
	Type string `json:"type"`
}

func main() {
	person := newPerson("dyw", "cd", 20)
	fmt.Println(person)

	//集成得到的方法
	person.SayHello()

	//json序列化
	marshal, err := json.Marshal(person)
	if err != nil {
		log.Println(err)
	}
	fmt.Printf("%s", marshal)

}

//Animal方法
func (a *Animal) SayHello() {
	fmt.Println("say Hello")
}

// 构造方法
func newPerson(name, city string, age int) *Person {
	return &Person{
		name: name,
		city: city,
		age:  age,
	}
}

// Name get方法
func (p *Person) Name() string {
	return p.name
}

// City get方法
func (p *Person) City() string {
	return p.city
}

// Age get方法
func (p *Person) Age() int {
	return p.age
}

//SetName set方法
func (p *Person) SetName(name string) {
	p.name = name
}
func (p *Person) SetAge(age int) {
	p.age = age
}
func (p *Person) SetCity(city string) {
	p.city = city
}
